﻿//-------------------------------------------------------------------------------
// <copyright file="IQueryableContext.cs" company="bbv Software Services AG">
//   Copyright (c) 2009 bbv Software Services AG
//
//   Licensed under the Apache License, Version 2.0 (the "License");
//   you may not use this file except in compliance with the License.
//   You may obtain a copy of the License at
//
//       http://www.apache.org/licenses/LICENSE-2.0
//
//   Unless required by applicable law or agreed to in writing, software
//   distributed under the License is distributed on an "AS IS" BASIS,
//   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
//   See the License for the specific language governing permissions and
//   limitations under the License.
// </copyright>
//------------------------------------------------------------------------------

using System;
using System.Linq.Expressions;

namespace bbv.DomainDrivenDesign.Interfaces
{
    using System.Linq;

    /// <summary>
    /// Defines an interface of a querable context of a particular type.
    /// </summary>
    /// <typeparam name="TEntity">The type of the <see cref="T:bbv.DomainDrivenDesign.Interfaces.IQueryableContext`1"/></typeparam>
    public interface IQueryableContext<TEntity> : IQueryable<TEntity>
    {
        /// <summary>
        /// Specifies the related objects to include in the query results.
        /// </summary>
        /// <param name="path">Dot-separated list of related objects to return in the query results.</param>
        /// <returns>A new <see cref="T:bbv.DomainDrivenDesign.Interfaces.IQueryableContext`1"/> with the defined query path.</returns>
        IQueryableContext<TEntity> Include(string path);

        ///<summary>
        ///</summary>
        ///<param name="path"></param>
        ///<returns></returns>
        IQueryableContext<TEntity> Include(Expression<Func<TEntity, object>> path);
    }
}
